package com.tywj.lib.businessweak.list

import androidx.collection.ArrayMap
import com.tywj.lib.businessweak.entity.AbsLoadList
import com.chad.library.adapter.base.BaseQuickAdapter
import com.tywj.lib.net.retrofit.request.GetRequest

/**
 * <pre>
 *     author : Taylor Zhang
 *     time   : 2019/08/20
 *     desc   : 列表界面需要实现的接口
 *     version: 1.0.0
 * </pre>
 */
@Deprecated(
    "该类被废弃了",
    ReplaceWith("IPagingView", "com.tywj.lib.businessweak.paging.IPagingView")
)
interface IList<D : AbsLoadList<T>, T> {

    /**
     * 获取RecyclerView的适配器
     */
    fun getRecyclerViewAdapter(): BaseQuickAdapter<T, *>

    /**
     * 获取请求地址
     */
    fun getRequest(): GetRequest

    /**
     * 获取请求参数
     */
    fun getRequestParams(): ArrayMap<String, String>

    /**
     * 执行网络请求
     * @param request 网络请求
     * @param successBlock 请求成功函数块
     * @param errorBlock 请求失败函数块
     * @param completeBlock 请求完成函数块
     */
    fun executeRequest(request: GetRequest, successBlock: (D) -> Unit
                       , errorBlock: (code: Int, message: String) -> Unit, completeBlock: () -> Unit)

    /**
     * 获取到数据之后会调用该方法，可以用来接收额外字段或者对列表数据进行处理
     * @param isRefresh 是否为刷新。true：刷新；false：加载更多。
     * @param data 获取到的数据
     * @return 是否要自行将列表中的数据添加 adapter。false：默认值，交给上层代码自动添加；true：自己将数据添加到 adapter。
     */
    fun onLoadSuccess(isRefresh: Boolean, data: D): Boolean = false

    /**
     * 加载数据发生错误
     * @param isRefresh 是否为刷新。true：刷新；false：加载更多。
     * @param code 错误状态码
     * @param message 错误消息
     * @return 是否自行处理错误。false：默认值，上层代码处理；true：自行处理。
     */
    fun onLoadError(isRefresh: Boolean, code: Int, message: String): Boolean = false
}